/*
* leetcode 3180. 执行操作可获得的最大总奖励1
*
给你一个整数数组 rewardValues，长度为 n，代表奖励的值。
最初，你的总奖励 x 为 0，所有下标都是 未标记 的。你可以执行以下操作 任意次 ：
从区间 [0, n - 1] 中选择一个 未标记 的下标 i。
如果 rewardValues[i] 大于 你当前的总奖励 x，则将 rewardValues[i] 加到 x 上（即 x = x + rewardValues[i]），并 标记 下标 i。
以整数形式返回执行最优操作能够获得的 最大 总奖励。

示例 1：

输入：rewardValues = [1,1,3,3]
输出：4
解释：
依次标记下标 0 和 2，总奖励为 4，这是可获得的最大值。
* */
/*

* */
import java.util.*;
//哈希法
class Solution {
    public int maxTotalReward(int[] rewardValues) {
        Arrays.sort(rewardValues);
        int n=rewardValues.length,max=0;
        Set<Integer> set=new HashSet<>();
        set.add(0);
        for(int i=0;i<n;i++){
            for(int j=0;j<rewardValues[i];j++){
                if(set.contains(j)){
                    set.add(j+rewardValues[i]);
                    max=Math.max(max,j+rewardValues[i]);
                }
            }
        }
        return max;
    }
}